package com.example.d10_api_object;

// Cloneable是一个标记接口 实现这个接口才可以调用这个clone方法
// 规则
public class User implements Cloneable {
    private int id; // 编号
    private String username; // 用户名
    private String password; // 密码
    private double[] scores; // 分数

    public User() {
    }

    public User(int id, String username, String password, double[] scores) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.scores = scores;
    }

    /*
    Java中克隆有两种方式 分别是浅克隆 深克隆
    1.浅克隆：拷贝出的新对象,与原对象中的数据一模一样,如果是引用数据类型拷贝的是地址(也就是拷贝出来的对象也指向相同的地方)
    2.深克隆：对象中的基本数据类型还是直接拷贝,但是对象中的引用数据类型,就不会拷贝原来的地址,而是直接创建新的对象
     */
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // super去调用父类Object中的clone方法
        User u2 = (User) super.clone();
        u2.scores = u2.scores.clone();
        return u2;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double[] getScores() {
        return scores;
    }

    public void setScores(double[] scores) {
        this.scores = scores;
    }
}
